﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace API_CIC.CapaDatos
{
    public class cActivosDatos
    {
        public static void Insertar(SGAPFACTIVO p_activo)
        {
            _datacontext.SGAPFACTIVOs.InsertOnSubmit(p_activo);

            try
            {
                _datacontext.SubmitChanges();
            }
            catch (Exception ex)
            {
                throw new ITCRException("cGestionActivos: :Ingresar: :Ocurrió un error.", ex);
            }
        }

        private static readonly LinqClasesDataContext _datacontext = new LinqClasesDataContext();

        internal static void Modificar(SGAPFACTIVO p_activo)
        {
            var activo = (from a in _datacontext.SGAPFACTIVOs
                           where a.ID_ACTIVO == p_activo.ID_ACTIVO
                           select a).Single();
            activo.CAN_ACTIVO = p_activo.CAN_ACTIVO;
            activo.COD_ACTIVO = p_activo.COD_ACTIVO;
            activo.DSC_ACTIVO = p_activo.DSC_ACTIVO;
            activo.TXT_MARCA = p_activo.TXT_MARCA;
            activo.FEC_INGRESO = p_activo.FEC_INGRESO;
            activo.NOM_ACTIVO = p_activo.NOM_ACTIVO;
            try
            {
                _datacontext.SubmitChanges();
            }
            catch (Exception ex)
            {
                throw new ITCRException("cGestionActivos: :Modificar: :Ocurrió un error.", ex);
            }
        }

        internal static SGAPFACTIVO GetActivo(int p_activoid)
        {
            IOrderedQueryable<SGAPFACTIVO> bs = (IOrderedQueryable<SGAPFACTIVO>)from activos in _datacontext.SGAPFACTIVOs
                                                                                  where activos.ID_ACTIVO == p_activoid
                                                                                  select activos;


            return bs.First();
        }

        internal static IEnumerator<SGAPFACTIVO> GetActivoByProyecto(int p_proy)
        {
            IOrderedQueryable<SGAPFACTIVO> bs = (IOrderedQueryable<SGAPFACTIVO>)from activos in _datacontext.SGAPFACTIVOs
                                                                                where activos.COD_PROYECTO == p_proy || activos.COD_PROYECTO == null
                                                                                select activos;


            return bs.GetEnumerator();
        }

        internal static void Desasignar(int p_act)
        {
            var activo = (from a in _datacontext.SGAPFACTIVOs
                          where a.ID_ACTIVO == p_act
                          select a).Single();

            activo.SGAPFPROYECTO = null;
            _datacontext.SubmitChanges();
        }

        internal static void ModificarActProyecto(int p_act, int p_proyecto)
        {
            var activo = (from a in _datacontext.SGAPFACTIVOs
                          where a.ID_ACTIVO == p_act
                          select a).Single();
            var proyecto = (from p in _datacontext.SGAPFPROYECTOs
                            where p.ID_PROYECTO == p_proyecto
                            select p).Single();

            activo.SGAPFPROYECTO = proyecto;
            _datacontext.SubmitChanges();
        }
    }
}